A30 - Combination
提出
code: python
n, r = map(int, input().split())
nn = 1
for i in range(1, n+1):
nn *= i
rr = 1
for i in range(1, r+1):
rr *= i
nminusr = 1
for i in range(1, n-r+1):
nminusr *= i
print(nn / (rr * nminusr))
解答
code: python
# a の b 乗を mod で割った余りを返す関数
def power(a, b, mod):
ans = 1
for i in range(30):
# b の i 番目のビットが 1
if (b >> i) & 1:
# a の 2^i 乗 を掛ける
ans = (ans * a) % mod
# a の 2^i 乗 を準備
a = (a * a) % mod
return ans
n, r = map(int, input().split())
mod = 1000000007
# 分子を求める
a = 1
for i in range(1, n + 1):
a = (a * i) % mod
# 分母を求める
b = 1
for i in range(1, r+1):
b = (b * i) % mod
for i in range(1, n-r+1):
b = (b * i) % mod
# a÷b を mod で割った余り
print((a * power(b, mod - 2, mod)) % mod)